import os
import sys
import logging
from datetime import datetime


class Logger:
    def __init__(self, name='monitoring_app'):
        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG)

        # 设置日志文件路径
        if getattr(sys, 'frozen', False):
            # 如果是打包后的程序，使用应用程序所在目录
            app_dir = os.path.dirname(sys.executable)
        else:
            # 如果是开发环境，使用当前目录
            app_dir = os.path.dirname(
                os.path.dirname(os.path.abspath(__file__)))

        # 创建logs目录
        logs_dir = os.path.join(app_dir, 'logs')
        os.makedirs(logs_dir, exist_ok=True)

        # 使用日期作为日志文件名
        date_str = datetime.now().strftime('%Y%m%d')
        log_file = os.path.join(logs_dir, f'{name}_{date_str}.log')

        # 创建文件处理器
        file_handler = logging.FileHandler(log_file, encoding='utf-8')
        file_handler.setLevel(logging.DEBUG)

        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.DEBUG)

        # 创建格式化器
        formatter = logging.Formatter(
            '%(asctime)s [%(levelname)s] [%(name)s] - %(message)s'
        )

        # 设置格式化器
        file_handler.setFormatter(formatter)
        console_handler.setFormatter(formatter)

        # 添加处理器到logger（避免重复添加）
        if not self.logger.handlers:
            self.logger.addHandler(file_handler)
            self.logger.addHandler(console_handler)

    def debug(self, message):
        self.logger.debug(message)

    def info(self, message):
        self.logger.info(message)

    def warning(self, message):
        self.logger.warning(message)

    def error(self, message):
        self.logger.error(message)

    def critical(self, message):
        self.logger.critical(message)


# Create a default logger instance
default_logger = Logger()
